Appium提示Attempt to re-install io.appium.settings without first uninstalling

问题

使用Appium + Python执行自动化测试用例过程中提示如下问题:

1
2
3
selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Command failed: C:\WINDOWS\system32\cmd.exe /s /c ""E:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" -s eaf4e6a6 install "E:\Program Files (x86)\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk""
Failed to install E:\Program Files (x86)\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.]
)

原因分析

研究发现,出现这一错误是因为Appium在执行测试脚本之前会安装如下两个包:

  • io.appium.settings
  • io.appium.unlock
    正常情况下,测试结束后,应该删除这两个包,下次测试时再安装;或者在测试开始前检查是否存在,存在则不安装。
    不知是由于我的测试机安卓版本太高(Android 7)亦或其他原因,执行后没有卸载这两个包,而每次开始却进行安装操作,所以引发了上述错误。

    解决方案

  1. 每次执行前,手动在测试机上删除这两个包
  2. 通过cmd删除:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    adb uninstall io.appium.settings
    adb uninstall io.appium.unlock
    ```
    3. 将两个包的卸载命令写入测试脚本
    前两种比较麻烦,适合偶尔测试,频繁测试和调试的话,建议使用第三种方式
    # 后续 #
    最近使用了unicodeKeyboard=True resetKeyboard=True的选项隐藏屏幕键盘,再次启动时提示了:

Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.ime without first uninstalling

1
2
3
感觉和上次的问题类似,最终找到了**简单的终极解决方案**:
找到下述文件,注释掉line 112~114,这三行分别对应安装unicode-ime、settings、unlock这几个工具的命令。
C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android\android.js

this.processFromManifest.bind(this),
this.uninstallApp.bind(this),
this.installAppForTest.bind(this),
this.forwardPort.bind(this),
this.pushAppium.bind(this),

// this.initUnicode.bind(this),
// this.pushSettingsApp.bind(this),
// this.pushUnlock.bind(this),
function (cb) {this.uiautomator.start(cb);}.bind(this),
this.wakeUp.bind(this),
this.unlock.bind(this),
this.getDataDir.bind(this),
```

欢迎打赏!